"""
MCP修复工具
解决FastAPI-MCP集成中的递归问题
"""

import sys
import asyncio
from typing import Any, Dict, Optional
from functools import wraps

# 用于跟踪递归深度的全局变量
_mcp_recursion_depth = 0
_mcp_max_recursion_depth = 100


def limit_recursion(max_depth: int = 100):
    """
    装饰器，用于限制函数的递归深度
    
    Args:
        max_depth: 最大递归深度
    """
    def decorator(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            global _mcp_recursion_depth
            
            if _mcp_recursion_depth >= max_depth:
                raise RecursionError(f"超过最大递归深度 {max_depth}")
            
            _mcp_recursion_depth += 1
            try:
                return func(*args, **kwargs)
            finally:
                _mcp_recursion_depth -= 1
                
        return wrapper
    return decorator


def patch_fastapi_mcp_recursion():
    """
    修复FastAPI-MCP中的递归问题
    通过设置Python递归限制和添加防护措施
    """
    # 增加递归限制以防止递归深度超限错误
    current_limit = sys.getrecursionlimit()
    if current_limit < 2000:
        sys.setrecursionlimit(2000)
        print(f"已将递归限制从 {current_limit} 增加到 2000")


def safe_call_mcp_method(method, *args, **kwargs):
    """
    安全调用MCP方法，防止递归问题
    
    Args:
        method: 要调用的方法
        *args: 方法参数
        **kwargs: 方法关键字参数
        
    Returns:
        方法调用结果
    """
    global _mcp_recursion_depth
    
    if _mcp_recursion_depth >= _mcp_max_recursion_depth:
        raise RecursionError("MCP调用超过最大递归深度")
    
    _mcp_recursion_depth += 1
    try:
        return method(*args, **kwargs)
    finally:
        _mcp_recursion_depth -= 1